package developer.zyk.global.user.bo.config;

import lombok.Data;

import java.util.Map;
import java.util.Optional;

/**
 * @author zhangyongkang
 * @time 2025/5/15 20:07
 * @description
 */

public class ModelConfig {

    //模型细节配置
    public Map<String, ModelConfigDetail> modelConfig;

    //默认使用的模型
    private String defaultModel;

    //文本嵌入配置
    private EmbeddingConfig embeddingConfig;

    @Data
    public static class EmbeddingConfig {
        private String modelType;//使用的嵌入模型
    }

    @Data
    public static class ModelConfigDetail {
        //系统提示词
        private String systemPromptTemplate;
        //外挂知识库配置
        private RagConfig ragConfig;
        //会话上下文长度
        private Integer historySize;
        //会话内容重复惩罚
        private Double frequencyPenalty;

        @Data
        public static class RagConfig {
            //启用外挂知识库
            private Boolean enableRag;
            //引用文档的数量
            private Integer topN;
            //提示模版
            private String promptTemplate;
            //用户配置的值
            private Double similarityThreshold;
        }
    }


    //获取指定模型的配置
    public ModelConfigDetail getModelConfig(String type) {
        return Optional.ofNullable(modelConfig).map(a -> a.get(type))
                .orElseGet(() -> {
                    ModelConfigDetail modelConfigDetail = new ModelConfigDetail();
                    modelConfigDetail.setRagConfig(new ModelConfigDetail.RagConfig());
                    return modelConfigDetail;
                });
    }
}
